package cfg.mpsc;

import java.util.ArrayList;
import java.util.List;


public class Path implements Cloneable{

	private List<INode> nodes = new ArrayList<INode>();
	
	public Path(INode begin) {
		add(begin);
	}

	public Path() {	}

	
	public String toString(){
		StringBuilder sb = new StringBuilder().append("(");
		int max = nodes.size()-1;
		for(int i=0;i<max;++i){
			sb.append(nodes.get(i).toString()).append(",");
		}
		if(max>=0){
			sb.append(nodes.get(max).toString()).append(")");
		}		
		return sb.toString();
	}
	
	public Path clone(){
		Path p = new Path();
		for(int i=0;i<nodes.size();++i){
			p.nodes.add(this.nodes.get(i));
		}
		return p;
	}
	
	
	public void add(INode n){
		this.nodes.add(n);
	}
	
	
	public INode lastNode(){
		return this.nodes.get(nodes.size()-1);
	}

	public int lastIndexOf(INode iNode) {
		for(int i=nodes.size()-1;i>=0;--i){
			if(nodes.get(i).equals(iNode)){
				return i;
			}
		}
		return -1;
	}

	public INode get(int i) {
		if(i>=0 && i<nodes.size()){
			return nodes.get(i);
		}
		return null;
	}
	
	
	public EdgesPath toEdgesPath(){
		EdgesPath ep = new EdgesPath();
		for(int i=1;i<nodes.size();++i){
			IEdge e = new IEdgeImpl(nodes.get(i-1),nodes.get(i));
			ep.add(e);
		}
		return ep;
	}
	
}
